[IA64] Fix failure when Xen is booted with "nomca"
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 30 Nov 2006 22:57:55 +0000 (15:57 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 30 Nov 2006 22:57:55 +0000 (15:57 -0700)
Based on patch from Kazuhiro Suzuki <kaz@jp.fujitsu.com>

Signed-off-by: Alex williamson <alex.williamson@hp.com>
xen/arch/ia64/linux-xen/mca.c
xen/arch/ia64/xen/fw_emul.c
xen/include/asm-ia64/xenmca.h

index cf43c17cb84692d777a304c4f0a876d92e8d6cea..8715ef1d5eb547c51b49fbbfe1c64e5c85a4b9b5 100644 (file)
@@ -206,8 +206,8 @@ static ia64_state_log_t ia64_state_log[IA64_MAX_LOG_TYPES];
 #define IA64_LOG_COUNT(it)         ia64_state_log[it].isl_count
 
 #ifdef XEN
-struct list_head sal_queue[IA64_MAX_LOG_TYPES];
-sal_log_record_header_t *sal_record = NULL;
+struct list_head *sal_queue, sal_log_queues[IA64_MAX_LOG_TYPES];
+sal_log_record_header_t *sal_record;
 DEFINE_SPINLOCK(sal_queue_lock);
 #endif
 
@@ -1606,7 +1606,7 @@ ia64_mca_cpu_init(void *cpu_data)
                }
        }
 #ifdef XEN
-       else {
+       else if (sal_queue) {
                int i;
                for (i = 0; i < IA64_MAX_LOG_TYPES; i++)
                        ia64_log_queue(i, 0);
@@ -1811,10 +1811,13 @@ ia64_mca_init(void)
        ia64_log_init(SAL_INFO_TYPE_CPE);
 
 #ifdef XEN
-       INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_MCA]);
-       INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_INIT]);
-       INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_CMC]);
-       INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_CPE]);
+       INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_MCA]);
+       INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_INIT]);
+       INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_CMC]);
+       INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_CPE]);
+
+       /* NULL sal_queue used elsewhere to determine MCA init state */
+       sal_queue = sal_log_queues;
 
        open_softirq(CMC_DISABLE_SOFTIRQ,
                     (softirq_handler)ia64_mca_cmc_vector_disable);
index 6dc9ea4f8a798b4cdeb290c70d001fb89abe6ed9..e539224cd23f0824d4a528f35e3fac400ef144f9 100644 (file)
@@ -214,7 +214,7 @@ sal_emulator (long index, unsigned long in1, unsigned long in2,
                        struct smp_call_args_t arg;
 
                        spin_lock_irqsave(&sal_queue_lock, flags);
-                       if (list_empty(&sal_queue[in1])) {
+                       if (!sal_queue || list_empty(&sal_queue[in1])) {
                                sal_log_record_header_t header;
                                XEN_GUEST_HANDLE(void) handle =
                                        *(XEN_GUEST_HANDLE(void)*)&in3;
index c541b237be5e3dd586e3c696cc04b84086ab3c13..653253e8fdc0fe165de4813f3aaf94ae3af57146 100644 (file)
@@ -21,7 +21,7 @@ typedef struct sal_queue_entry_t {
        struct list_head list;
 } sal_queue_entry_t;
 
-extern struct list_head sal_queue[];
+extern struct list_head *sal_queue;
 
 struct ia64_mca_tlb_info {
        u64 cr_lid;